from django.shortcuts import render, redirect
from . import models
import hashlib

# Create your views here.

def index(request):
    return render(request, 'index.html')

def login(request):
    if request.method == 'GET':
        # 初次进入登录表单
        return render(request, 'login.html')
    elif request.method == 'POST':
        context = {
            'message': '',
        }
        username = request.POST.get('username')  # 对应login.html中form表单中的用户名
        password = request.POST.get('password')
        user = models.User.objects.filter(name=username).first()
        if user:
            if _hash_password(password) == user.hash_password:
            # if user.password == password:
                context['message'] = '登录成功'
                # 服务器设置sessionid和其他用户信息，sessionid自动生成的
                request.session['is_login'] = True
                request.session['username'] = user.name
                request.session['userid'] = user.id
                return redirect('/index/')
            else:
                context['message'] = '密码错误'
                return render(request, 'login.html', context=context)
        else:
            context['message'] = '未注册'
        return render(request, 'login.html', context=context)

def register(request):
    if request.method == 'GET':
        return render(request, 'register.html')
    elif request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        email = request.POST.get('email')
        # 简单后端表单验证
        # if not (username.strip() and password.strip() and email.strip()):
        #     print('某个字段为空')
        #     return
        # if len(username) > 20 or len(password) > 20:
        #     print('用户名或密码长度不能超过20')

        # 写数据库
        # 'insert into login_user (name, password, email) values (%s, %s, %s) % ('', '', '')'

        user = models.User.objects.filter(email=email).first()
        if user:
            return render(request, 'register.html', context={'message': '用户已存在'})

        # 加密密码
        hash_password = _hash_password(password)

        # 写数据库
        try:
            user = models.User(name=username, password=password, hash_password=hash_password, email=email)
            user.save()
            print('保存成功')
            return render(request, 'login.html', context={'message': '注册成功，请登录'})
        except Exception as e:
            print('保存失败', e)
            return redirect('/register/')

def logout(request):
    """ 注销 """
    # 清除session 登出
    request.session.flush()
    return redirect('/index/')

def _hash_password(password):
    """ 哈希加密用户注册密码 """
    sha = hashlib.sha256()
    sha.update(password.encode(encoding='utf-8'))
    return sha.hexdigest()

# def _hash_password(password, salt='asdf'):
#     """ 哈希加密用户注册密码 加盐版"""
#       salt = ''
#       for i in range(4):
#           salt += chr(random.randint(65, 90))
#     sha = hashlib.sha256()
#     sha.update((password+salt).encode(encoding='utf-8'))
#     return '$asdf$'+sha.hexdigest()
    



# 查询数据库
# user = models.User.objects.filter(name=username, password=password).first()